package com.zxtc.wh.pojo.appVersion;

import java.util.HashMap;
import java.util.Map;

/**
 * 应用版本升级时的状态码，标示了升级的紧急程度、更新资源包类型等等信息
 */
public interface AppUpdateVesionConstant {
    /**
     * 更新的资源类型
     */
    class ResourceType {
        /**
         * 默认的类型类型
         */
        public static final int Default = 0;

        /**
         * apk应用安装包类型
         */
        public static final int Appliction = 1;
        /**
         * 用apk文件组织的资源和代码的资源包，不直接作为应用安装，作为代码包、资源包存在
         */
        public static final int Apk_zip = 2;
        /**
         * 类或包结构组织的类，热更新使用
         */
        public static final int Dex = 3;
        public static final int Jar = 4;
        public static final int Class = 5;

        /**
         * 差异包
         */
        public static final int Differential = 6;

        private static final Map<String, Integer> map = new HashMap<>();

        static {
            map.put("DEFAULT", Default);
            map.put("APPLICTION", Appliction);
            map.put("APK_ZIP", Apk_zip);
            map.put("DEX", Dex);
            map.put("JAR", Jar);
            map.put("CLASS", Class);
        }

        /**
         * 通过字符串映射为对应的数值，不区分大小写
         *
         * @param key 映射的键字符串
         * @return 字符串映射的数值
         */
        public static Integer getValue(String key) {
            key = key.toUpperCase();
            return map.get(key);
        }

    }

    /**
     * 下载更新资源包的紧急程度
     */
    class DownloadType {
        /**
         * 默认的类型类型
         */
        public static final int Default = 0;

        /**
         * 强制用户同意下载，不同意就终止运行
         */
        public static final int Compel_Download = 1;
        /**
         * 请求（用户）立刻下载更新包
         */
        public static final int Request_Download = 2;
        /**
         * 静默的、等待合适的时机下载
         */
        public static final int Silent_Prepare_Download = 3;
        /**
         * 静默的 立即开始 下载
         */
        public static final int Silent_Promptly_Download = 4;

        private static final Map<String, Integer> map = new HashMap<>();
        static {
            map.put("DEFAULT", Default);
            map.put("COMPEL_DOWNLOAD", Compel_Download);
            map.put("REQUEST_DOWNLOAD", Request_Download);
            map.put("SILENT_PREPARE_DOWNLOAD", Silent_Prepare_Download);
            map.put("SILENT_PROMPTLY_DOWNLOAD", Silent_Promptly_Download);
        }

        /**
         * 通过字符串映射为对应的数值，不区分大小写
         *
         * @param key 映射的键字符串
         * @return 字符串映射的数值
         */
        public static Integer getValue(String key) {
            key = key.toUpperCase();
            return map.get(key);
        }
    }

    /**
     * 重启宿主的紧急程度
     */
    class RestartType {
        /**
         * 默认的类型类型
         */
        public static final int Default = 0;

        /**
         * 无需重启，正常运行
         */
        public static final int No_Restart = 1;
        /**
         * 等到合适的时机更新（重启时、被更新代码还没有加载到应用、或其它可以立即更新）
         */
        public static final int Prepare_Restart = 2;
        /**
         * 静默的、立即重启应用
         */
        public static final int Silent_Promptly_Restart = 3;
        /**
         * 请求重启应用
         */
        public static final int Request_Restart = 4;
        /**
         * 模块重启
         */
        public static final int Restart_Module = 5;

        private static final Map<String, Integer> map = new HashMap<>();
        static {
            map.put("DEFAULT", Default);
            map.put("NO_RESTART", No_Restart);
            map.put("PREPARE_RESTART", Prepare_Restart);
            map.put("SILENT_PROMPTLY_RESTART", Silent_Promptly_Restart);
            map.put("REQUEST_RESTART", Request_Restart);
            map.put("RESTART_MODULE", Restart_Module);
        }

        /**
         * 通过字符串映射为对应的数值，不区分大小写
         *
         * @param key 映射的键字符串
         * @return 字符串映射的数值
         */
        public static Integer getValue(String key) {
            key = key.toUpperCase();
            return map.get(key);
        }
    }

    /**
     * 安装更新资源包的紧急程度
     */
    class InstallType {
        /**
         * 默认的类型类型
         */
        public static final int Default = 0;

        /**
         * 强制要求用户同意立即安装，不同意则中止应用运行
         */
        public static final int Compel_Install = 1;
        /**
         * 请求（用户）立刻安装更新包
         */
        public static final int Request_Install = 2;
        /**
         * 静默的、等到合适的时机（重启的时候）安装更新包
         */
        public static final int Silent_Prepare_Install = 3;
        /**
         * 悄悄的、立即安装更新
         */
        public static final int Silent_Promptly_Install = 4;

        private static final Map<String, Integer> map = new HashMap<>();
        static {
            map.put("DEFAULT", Default);
            map.put("COMPEL_INSTALL", Compel_Install);
            map.put("REQUEST_INSTALL", Request_Install);
            map.put("SILENT_PREPARE_INSTALL", Silent_Prepare_Install);
            map.put("SILENT_PROMPTLY_INSTALL", Silent_Promptly_Install);
        }

        /**
         * 通过字符串映射为对应的数值，不区分大小写
         *
         * @param key 映射的键字符串
         * @return 字符串映射的数值
         */
        public static Integer getValue(String key) {
            key = key.toUpperCase();
            return map.get(key);
        }
    }
}
